package com.udistrisisbici.util.logs;

/**
 *
 * @author ST&T
 */
public class Logger {

    private org.apache.log4j.Logger logger;

    private Logger(Class aClass) {
        logger = org.apache.log4j.Logger.getLogger(aClass);
    }

    private Logger(String nombreLog) {
        logger = org.apache.log4j.Logger.getLogger(nombreLog);
    }

    public static Logger getLogger(Class aClass) {
        return new Logger(aClass);
    }

    public static Logger getLogger(String nombreLog) {
        return new Logger(nombreLog);
    }

    public void debug(Object log) {
        logger.debug(log);
    }

    public void debug(Object log, Throwable t) {
        logger.debug(log, t);
    }

    public void error(Object log) {
        logger.error(log);
    }

    public void error(Object log, Throwable t) {
        logger.error(log, t);
    }

    public void info(Object log) {
        logger.info(log);
    }

    public void warn(Object log) {
        logger.warn(log);
    }

    public void warn(Object log, Throwable t) {
        logger.warn(log, t);
    }

    /**
     * Genera fragmento inicial de log para indicar inicio de metodo
     *
     * @param nombreMetodo nombre del metodo
     * @return fragmento del log
     */
    public static String getLogInicio(final String nombreMetodo) {
        return getLogInicio(nombreMetodo, null);
    }

    /**
     * Genera fragmento inicial de log para indicar inicio de metodo
     *
     * @param nombreMetodo nombre del metodo
     * @param parametros texto con los diferentes parametros
     * @return fragmento del log
     */
    public static String getLogInicio(final String nombreMetodo, final String parametros) {
        StringBuilder sb = new StringBuilder("\n\n###############INICIO - ");
        sb.append(nombreMetodo);
        sb.append("###############\n");
        if (parametros != null) {
            sb.append("Parametros:\n");
            sb.append(parametros);
        }
        return sb.toString();
    }

    /**
     * Genera un String con el log final de un metodo
     *
     * @param nombreMetodo nombre del metodo
     * @param tiempo tiempo ejecucion
     * @return String con el fragmento del log
     */
    public static String getLogFin(final String nombreMetodo, final long tiempo) {
        StringBuilder sb = new StringBuilder("\nTiempo: ");
        sb.append(tiempo);
        sb.append("\n\n###############FIN - ");
        sb.append(nombreMetodo);
        sb.append("###############");
        return sb.toString();
    }
}
